Docker Selenium能讓Selenium在Docker中運行,可加速建置時間及獨立出各瀏覽器的版本
,保持了一定的隔離性,是非常好的測試環境。
鏡像介紹
selenium/hub: Grid Hub,相當於一個空白的Seleniun Server,
selenium/node-chrome: Chrome節點,需加入Grid Hub才能使用。
selenium/node-firefox: Firefox節點,需加入Grid Hub才能使用。
selenium/node-chrome-debug: Chrome節點,同時包含VNC Server,需加入Grid Hub才能使用。
selenium/node-firefox-debug: Firefox節點,同時包含VNC Server,需加入Grid Hub才能使用
selenium/standalone-chrome: 包含Chrome的Seleniun Server,可直接調用。
selenium/standalone-firefox: 包含Chrome的Seleniun Server,可直接調用。
selenium/standalone-chrome-debug: 包含Chrome的Seleniun Server,同時包含VNC Server,可直接調用。
selenium/standalone-firefox-debug: 包含Chrome的Seleniun Server,同時包含VNC Server,可直接調用。
使用
docker conpose方法
selenium 官方提供了docker compose方法,直接使用就可以輕鬆搭建了。
docker-compose.yaml
1 | # To execute this docker-compose yml file use docker-compose -f <file_name> up |
docker-compose up --build
- 搭建成功
在docker-compose.yaml
中我指定公開的是4448端口,打開頁面看到可以成功訪問,能調用的瀏覽器有Chrome及Firefox.
Python 調用
調用方法與本地搭建selenium server相同,以下以chrome為例。
- 創建一個Chrome對象
1 | from selenium import webdriver |
如果成功調用,在slenium頁面也會看到一個chrome正在被使用。
- 進入Google首頁,試著打印網頁標題
1 | browser.get('http://www.google.com') |
- 測試截取當前頁面
1 | browser.save_screenshot("chrome.png") |
- 釋放瀏覽器
1 | browser.quit() |
結束調用,slenium頁面上的chrome已經變回彩色的。
另外一種模式 : Debug Mode
Docker Selenium 還有一種 Debug Mode,主要提供了有畫面的selenium,能直接看到瀏覽器在做什麼,Debug Mode使用了VNC服務器並佔用了5900端口,但要注意的是每個端口只能運行一個節點(Chrome、Firefox等),如果希望包含兩個節點或更多,那麼就必須公開不同的端口,如5900:5900、5901:5900…
Docker Compose 方法:
docker-compose up --build
1 | # To execute this docker-compose yml file use docker-compose -f <file_name> up |
- 訪問selenium頁面
這個頁面顯示了Selenium hub的狀態,如果想看到VNC的情況,需要進入Docker 容器才看的到。
用VNC 看瀏覽器在做什麼
- 安裝VNC軟體
推薦工具 免費VNC : ultravnc
- 打開UltraVNC Viewer
下載並安裝完成後,連進Docker內的VNC Server
- 點擊連接
- 輸入密碼
默認密碼 : secret
預設是有密碼的,若不希望輸入密碼可在容器變量中加入VNC_NO_PASSWORD: 1
。
- 連接成功
看到這個畫面代表成功連進了VNC
Python 調用
- 創建一個腳本,測試selnium運行的情況。
1 | from selenium import webdriver |
- 有畫面的selenium出現了
小結
docker selenium透過Docker建置的關係,構建非常方便快速,這邊主要介紹了兩種模式創建容器,一種是可以看見瀏覽器的,一種是默默執行的,測試運行速度也非常的快,感覺起來似乎比實體主機還要順上很多,但以長期的測試情況,就不知道會不會有其他問題了。